import router from './router'
import store from '@/store'
import NProgress from 'nprogress' // 进度条
import 'nprogress/nprogress.css'
import { asyncRoutes } from '@/router'

NProgress.configure({ showSpinner: false }) // 关闭小圆圈

let whiteList = ['/login', '/404'] // 白名单
// 前置全局守卫
router.beforeEach(async(to, from, next) => {
    NProgress.start()
    // 两条路线，token判断
    // 这样也可以啊 store.state.user.token
    if (store.getters.token) {
        // 有token,不允许去登录页
        if (to.path === '/login') {
            // 强制跳转到首页
            next('/')
            // 关闭进度条
            NProgress.done()
        } else {
            // 获取用户资料,vuex中没有id就说明没有用户信息
            if (!store.getters.userId) {
            // 获取用户数据
                let { roles } = await store.dispatch('user/getUserInfo')
                // asyncRoutes,获取动态路由信息
                const filterRoutes = asyncRoutes.filter(item => {
                    // return true/false
                    return roles.menus.includes(item.name)
                })
                // 为vuex的路由信息设置
                store.commit('user/setRoutes', filterRoutes)
                // 筛选后的路由
                // 添加动态路由
                router.addRoutes([...filterRoutes, { path: '*', redirect: '/404', hidden: true }]) // 添加动态路由信息到路由表
                // router添加动态路由之后 需要转发一下
                next(to.path) // 目的是让路由拥有信息 router的已知缺陷
            } else {
                // 不是去登录页，放行
                next()
            }
        }
    } else {
        // 没有token,判断是否在白名单
        if (whiteList.includes(to.path)) {
            // 在，放行
            next()
        } else {
            // 重定向到登录页
            next('/login')
            NProgress.done()
        }
    }
})

router.afterEach(() => {
    NProgress.done() // 关闭进度条
})
